package com.prs.crm.service.project;

import java.io.File;
import java.util.Collection;
import java.util.Date;

import org.courser.ui.PaginationSupport;

import com.prs.crm.domain.Attachment;
import com.prs.crm.domain.hr.Person;
import com.prs.crm.domain.project.Project;
import com.prs.crm.domain.project.Task;
import com.prs.crm.service.FlowService;

/**
 * 项目Service
 * @author prs.chenzhi
 *
 */
public interface ProjectService extends FlowService<Project>{
	
	
	/**
	 * 项目变更
	 */
	void executeVaryProject(Project project,File[] references,String[] fileNames);
	
	/**
	 * 删除项目文档
	 * @param project
	 * @param reference
	 */
	void removeProjectReference(Project project,Attachment reference);

	
	/**
	 * 创建项目
	 * @param project
	 * @param task
	 * @param joiner
	 * @param references
	 * @param fileNames
	 */
	void createProject(Project project,Task task,String joiner,File[] references,String[] fileNames);
	
	/**
	 * 列出我创建的未完成项目
	 * @param page
	 * @param recorder
	 * @return
	 */
	 PaginationSupport listCreateProject(PaginationSupport page,Person recorder);
	 
	 /**
	  * 列出历史项目
	  * @param page
	  * @return
	  */
	 PaginationSupport listHistoryProject(PaginationSupport page,Person recorder);
	 
	 /**
	  * 列出所有的项目
	  * @param page
	  * @return
	  */
	 PaginationSupport listAllProject(PaginationSupport page);
	 
	 
	 /**
	  * 列出冻结的项目
	  */
	 PaginationSupport listFrostProject(PaginationSupport page,Person creater);
	 
	 /**
	  * 冻结项目
	  */
	 void executeFrostProject(Project project);
	 
	 /**
	  * 项目解冻
	  * @param project
	  */
	 void executeUnfreezeProject(Project project);
	 
	 /**
	  * 获取报表数据源
	  * @param state 报表状态
	  * @param datestart 开始时间
	  * @param dateend 结束时间
	  * @param persons 制定人
	  * */
	 Collection<?> getProjectReportDataSource(Integer state, Date datestart, Date dateend, Collection<Person> persons);
	 
	 
}
